import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEAction } from '../action/ipsdeaction';
import { IPSDEDataSet } from '../ds/ipsdedata-set';
import { IPSSysDataSyncAgent } from '../../res/ipssys-data-sync-agent';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEDataSync
 */
export interface IPSDEDataSync extends IPSDataEntityObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 事件类型
   * @description 值模式 [平台数据通知监控行为（新建、更新、删除）] {1：新建、 2：更新、 4：删除、 256：自定义、 512：自定义2 }
   * @type {( number | 1 | 2 | 4 | 256 | 512)}
   */
  eventType: number | 1 | 2 | 4 | 256 | 512;

  /**
   * 导入实体行为
   *
   * @type {IPSDEAction}
   */
  getImportPSDEAction(): IPSDEAction | null;

  /**
   * 导入实体行为
   *
   * @type {IPSDEAction}
   */
  get importPSDEAction(): IPSDEAction | null;

  /**
   * 导入实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getImportPSDEActionMust(): IPSDEAction;

  /**
   * 输入数据集合
   *
   * @type {IPSDEDataSet}
   */
  getInPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 输入数据集合
   *
   * @type {IPSDEDataSet}
   */
  get inPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 输入数据集合（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getInPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 输入系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  getInPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输入系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  get inPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输入系统数据同步代理对象（必须存在）
   *
   * @type {IPSSysDataSyncAgent}
   */
  getInPSSysDataSyncAgentMust(): IPSSysDataSyncAgent;

  /**
   * 输入调用脚本代码
   * @type {string}
   */
  inScriptCode: string;

  /**
   * 输入判断实体行为
   *
   * @type {IPSDEAction}
   */
  getInTestPSDEAction(): IPSDEAction | null;

  /**
   * 输入判断实体行为
   *
   * @type {IPSDEAction}
   */
  get inTestPSDEAction(): IPSDEAction | null;

  /**
   * 输入判断实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getInTestPSDEActionMust(): IPSDEAction;

  /**
   * 输出数据集合
   *
   * @type {IPSDEDataSet}
   */
  getOutPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 输出数据集合
   *
   * @type {IPSDEDataSet}
   */
  get outPSDEDataSet(): IPSDEDataSet | null;

  /**
   * 输出数据集合（必须存在）
   *
   * @type {IPSDEDataSet}
   */
  getOutPSDEDataSetMust(): IPSDEDataSet;

  /**
   * 输出系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  getOutPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输出系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  get outPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输出系统数据同步代理对象（必须存在）
   *
   * @type {IPSSysDataSyncAgent}
   */
  getOutPSSysDataSyncAgentMust(): IPSSysDataSyncAgent;

  /**
   * 输出调用脚本代码
   * @type {string}
   */
  outScriptCode: string;

  /**
   * 输出判断实体行为
   *
   * @type {IPSDEAction}
   */
  getOutTestPSDEAction(): IPSDEAction | null;

  /**
   * 输出判断实体行为
   *
   * @type {IPSDEAction}
   */
  get outTestPSDEAction(): IPSDEAction | null;

  /**
   * 输出判断实体行为（必须存在）
   *
   * @type {IPSDEAction}
   */
  getOutTestPSDEActionMust(): IPSDEAction;

  /**
   * 同步输出模式
   * @description 值模式 [同步输出模式] {1：实时、 2：定时 }
   * @type {( number | 1 | 2)}
   * @default 1
   */
  outputMode: number | 1 | 2;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 同步方向
   * @description 值模式 [平台数据同步方向] {IN：输入、 OUT：输出 }
   * @type {( string | 'IN' | 'OUT')}
   */
  syncDir: string | 'IN' | 'OUT';

  /**
   * 导出全部
   * @type {boolean}
   */
  exportFull: boolean;

  /**
   * 自定义输入处理脚本
   * @type {boolean}
   * @default false
   */
  inCustomCode: boolean;

  /**
   * 自定义输出处理脚本
   * @type {boolean}
   * @default false
   */
  outCustomCode: boolean;

  /**
   * 启用
   * @type {boolean}
   * @default true
   */
  valid: boolean;
}
